package io.filecopy;

import java.io.File;

public interface PreparedJob {

  public JobDescription getJobDescription();

  public Iterable<File> getSourceFiles();

  public void addJobPreparationListener(JobPreparationListener listener);

  public void removeJobPreparationListener(JobPreparationListener listener);

  public boolean isCompletelyPrepared();

  public boolean hasMoreTasks() throws InterruptedException;

  public FileSystemTask getNextTask() throws InterruptedException;

  public int getNumberOfDirectoriesToCreate();

  public long getAdditionalBytes();

  public int getAdditionalFiles();

  public long getBytesToCopy();

  public long getBytesToDelete();

  public long getBytesToReplace();

  public JobDescription getDescription();

  public int getFilesToCopy();

  public int getFilesToDelete();

  public int getFilesToReplace();

  public long getKeptBytes();

  public int getKeptFiles();

  public int getNumberOfTouchesToPerform();

  public int getNumberOfVisitedDirectories();
}
